package com.webserver.core;

import java.io.IOException;
import java.io.InputStream;
import java.net.Socket;

/**
 * 当前线程任务负责与指定的客户端进行交互
 * 1解析请求
 * 2处理请求
 * 3发送响应第四步
 * 当一个客户端连接进入这个线程上就相当与接通一个电话然后进行上面三部操作
 */
public class ClientHandler implements Runnable {
    //定义一个套接字(电话)属性第五步
    private Socket socket;
    //构造方法里面赋值 第六步
    public ClientHandler(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {

        try {
            //解析请求接受进来的电话连接到输出流上第八步
            InputStream in = socket.getInputStream();
            int d;
            //为了读一行输出出来频繁拼接字符串第十一步
            StringBuilder builder =new StringBuilder();
            char pre='a',cur='a';//par表示上次读取到的一个字符，cur表示本次都得一个字符
            //第九步 读取客户端发来的信息只要读到-1表示读完了
            while ((d=in.read())!=-1){
                //将出来的信息当成字符来看第十步
                cur= (char)d;
                //判断一行是否读到了头第十二步
                if (pre==13&&cur==10){
                    break;
                }
                builder.append(cur);
                //本次读到的字符赋值给上次的读到字符用来记录第十三步
                pre=cur;
            }
            //得到的一行字符去除空格才是想要得到的内容第十四步

            String line = builder.toString().trim();
            //拆解请求行第十五步
            String method;//请求方式
            String uri;//抽象路径
            String protocol;//协议版本
            String[] data = line.split("\\s");
            method = data[0];
            uri = data[1];
            protocol = data[2];


            //处理请求



            //发送响应


        } catch (IOException e) {
            e.printStackTrace();
        }finally {

            try {
                //交互完毕断开连接
                socket.close();
            } catch (IOException e) {
                e.printStackTrace();
            }

        }



    }
}
